package config

import "time"

type Config struct {
	Sensor      SensorConfig `json:"sensor"`
	Server      ServerConfig `json:"server"`
	HealthCheck HealthConfig `json:"health_check"`
	MQTT        MQTTConfig   `json:"mqtt"` // MQTT 配置
}

type SensorPortConfig struct {
	SensorID   string `json:"sensor_id"`
	Type       string `json:"type"`
	DataLength int    `json:"data_length"`
}

type SensorConfig struct {
	Ports        map[string]SensorPortConfig `json:"ports"` // key: 端口名, value: 端口配置
	BaudRate     int                         `json:"baud_rate"`
	ReadInterval time.Duration               `json:"read_interval_ms"`
	BufferSize   int                         `json:"buffer_size"`
}

type ServerConfig struct {
	BaseURL string `json:"base_url"`
}

type HealthConfig struct {
	HealthCheckInterval time.Duration `json:"health_check_interval"`
	ReadyCheckInterval  time.Duration `json:"ready_check_interval"`
}

// MQTTTLSConfig MQTT TLS加密配置
type MQTTTLSConfig struct {
	Enabled            bool   `json:"enabled"`               // 是否启用TLS
	CAFile             string `json:"ca_file"`               // CA证书路径
	CertFile           string `json:"cert_file"`             // 客户端证书路径（可选）
	KeyFile            string `json:"key_file"`              // 客户端私钥路径（可选）
	InsecureSkipVerify bool   `json:"insecure_skip_verify"`  // 是否跳过证书验证（仅测试环境）
}

// MQTTConfig MQTT 配置
type MQTTConfig struct {
	Enabled  bool           `json:"enabled"`  // 是否启用 MQTT
	Broker   string         `json:"broker"`   // MQTT broker 地址，如 "tcp://127.0.0.1:1883" 或 "ssl://127.0.0.1:8883"
	Username string         `json:"username"` // MQTT 用户名（可选）
	QoS      byte           `json:"qos"`      // 服务质量等级：0, 1, 2
	Retained bool           `json:"retained"` // 是否保留消息
	TLS      MQTTTLSConfig  `json:"tls"`      // TLS配置
}

// 单个传感器设备配置
type SensorDeviceConfig struct {
	DeviceID    string    `json:"device_id"`    // 传感器设备ID
	Secret      string    `json:"secret"`       // 设备的秘密值
	Commitment  string    `json:"commitment"`   // 承诺值
	Registered  bool      `json:"registered"`   // 是否已注册
	Token       string    `json:"token"`        // JWT 认证令牌
	TokenExpiry time.Time `json:"token_expiry"` // 令牌过期时间
	ConfigFile  string    `json:"config_file"`  // 配置文件路径
	SensorType  string    `json:"sensor_type"`  // 传感器类型
	Port        string    `json:"port"`         // 串口路径
	DataLength  int       `json:"data_length"`  // 数据长度
	Description string    `json:"description"`  // 传感器描述
}

// 传感器设备配置数组（用于device_config.json）
type SensorDeviceConfigs []SensorDeviceConfig

// 设备配置（保持向后兼容，用于内部使用）
type DeviceConfig struct {
	DeviceID    string       `json:"device_id"`
	Secret      string       `json:"secret"`       // 设备的秘密值
	Commitment  string       `json:"commitment"`   // 承诺值
	Registered  bool         `json:"registered"`   // 是否已注册
	ConfigFile  string       `json:"config_file"`  // 配置文件路径
	Sensor      SensorConfig `json:"sensor"`       // 传感器配置
	Server      ServerConfig `json:"server"`       // 服务器配置
	HealthCheck HealthConfig `json:"health_check"` // 健康检查配置
	MQTT        MQTTConfig   `json:"mqtt"`         // MQTT配置
}
